Q: QuickTime ÇÃíPà çsóÒÇ™ä‘à·Ç¡ÇƒÇ¢ÇÈÇÊǧDžå©Ç¶ÇÈÇÃÇÕÇ»Ç∫Ç©Çí≤Ç◊ÇÊǧÇΔǵǃǢNjÇ∑ÅBQuickTime ÇÃíPà çsóÒÇÕéüÇÃÇÊǧDžǻÇÈÇÕÇ∏ÇæÇΔévÇÌÇÍÇ‹Ç∑ÅB
ǵǩǵÅASetIdentityMaxtix ÇégópǵǃçÏê¨Ç∑ÇÈÇΔÇ´Ç…ÇÕïKÇ∏ÅAà»â∫ÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
âΩÇ©ä‘à·Ç¡ÇΩDZÇΔÇǵǃǢÇÈÇÃÇ≈ǵÇÂǧǩÅH16384 ÇΔǢǧêîéöÇÕâΩÇà”ñ°Ç∑ÇÈÇÃÇ≈ǵÇÂǧǩÅH
A: MatrixRecord ÇÕ Fixed ílÇà 3 Å~ 3 ÇÃîzóÒÇΔǵǃêÈåæÇ≥ÇÍǃǢNjÇ∑Ç™ÅADZÇÃç\ë¢ëÃÇÃç≈å„ÇÃóÒÇÕÅAé¿ç€Ç…ÇÕ Fract ÇΔǵǃâéflÇ≥ÇÍǃǢNjÇ∑ÅBǵÇΩǙǡǃÅA16384 ÇΔǢǧêîéöÇÕÅAÇ‹Ç≥Ç… Fract Çà 1.0 Ç»ÇÃÇ≈Ç∑ÅB
Ç≥ÇÁÇ…è⁄ǵÇ≠å©ÇƒÇ¢Ç´Ç‹Ç∑ÅB
Fixed ÇÕ 16 ÉrÉbÉgÇÃïÑçÜïtÇ´êÆêîÇ… 16 ÉrÉbÉgÇÃóLóùêîÇë´ÇµÇΩLJÇÃÇ≈Ç∑ÅB
Fract ÇÕ 2 ÉrÉbÉgÇÃïÑçÜïtêÆêîÇ… 30 ÉrÉbÉgÇÃóLóùêîÇë´ÇµÇΩLJÇÃÇ≈Ç∑ÅB
typedef long Fixed;
typedef long Fract;
struct MatrixRecord {
Fixed matrix[3][3];
};
typedef struct MatrixRecord MatrixRecord;
|
ê} 1 ÇÃäeÉZÉãÇÕÅA3 Å~ 3 çsóÒÇÃëŒâûÇ∑ÇÈóvëfÇÃÉfÅ[É^å^Çé¶ÇµÇƒÇ¢Ç‹Ç∑ÅBçsóÒÇÃç≈èâÇà 2 óÒÇÃóvëfÇÕ Fixed ílÇ≈ï\åªÇ≥ÇÍÇ‹Ç∑ÅB3 óÒñ⁄ÇÃóvëfÇÕÅAFixed ílÇΔêÈåæÇ≥ÇÍǃǢNjÇ∑Ç™ÅAì‡ïîìIÇ…ÇÕ Fract ílÇΔǵǃï\åªÇ≥ÇÍÇ‹Ç∑ÅBFract ÉfÅ[É^å^ÇÕÅA2 ÉrÉbÉgÇÃêÆêîÇΔ 30 ÉrÉbÉgÇÃóLóùêîÇä‹Çfi 32 ÉrÉbÉgÇÃå≈íËè¨êîì_ílÇéwíËǵNjÇ∑ÅB
[0][0]Fixed [1][0]Fixed [2][0]Fract
[0][1]Fixed [1][1]Fixed [2][1]Fract
[0][2]Fixed [1][2]Fixed [2][2]Fract
|
ê} 1. MatrixRecord
|
DZÇÃÇÊǧDžǻÇÈÇÃÇÕÅAç≈å„ÇÃóÒÇ≈îÒÉAÉtÉBÉìÅiâìãflñ@Åjïœä∑ÇíËã`ǵǃǢÇÈÇΩÇflÇ≈Ç∑ÅBDZÇÍÇÁÇÃïœä∑Ç…ÇÕÅAÇ≥ÇÁÇ…çÇÇ¢ê∏ìxÇ™óvãÅÇ≥ÇÍÇ‹Ç∑Ç™ÅAílÇÃîÕàÕÇÕǪÇÍÇŸÇ«ëÂÇ´Ç≠Ç∑ÇÈïKóvÇÕdžÇËÇ‹ÇπÇÒÅB
DZÇÃç≈å„ÇÃóÒÇÕÅAóvëfílÇΔìÆçÏÇÃä‘ÇÃÉ}ÉbÉsÉìÉOÇ™ï°éGÇ≈džÇÈÇΩÇflÅAìΔé©Ç…ê≥ǵÇ≠ê›íËÇ∑ÇÈÇÃÇÕã…Çflǃç¢ìÔÇ≈Ç∑ÅBQuickTime Ç™íÒãüÇ∑ÇÈ QuadToQuadMatrix API ÇÕÅAâìãflñ@çsóÒÇÃÉZÉbÉgÉAÉbÉvÇ…égópÇ≈Ç´ÇÈÇŸÇ©ÅADZÇÍÇégópǵǃdžÇÁljÇÈïœä∑ÅiägëÂèkè¨ÅAâÒì]ÅAljǙǛǻǫÅjLJä»íPÇ…çsǶNjÇ∑ÅB
OSErr QuadToQuadMatrix(const Fixed *source,
const Fixed *dest, MatrixRecord *map);
|
ê} 2. QuadToQuadMatrix
API
|
DZÇÃåƒÇ—èoǵÇÕÅA4 ǬÇÃäJénì_ÇΔ 4 ǬÇÃç≈èIì_ÇéÊÇËÅADZÇÍÇÁÇÃì_ÇÃä‘ÇÉ}ÉbÉvÇ∑ÇÈçsóÒÇíËã`ǵNjÇ∑ÅB
à»â∫ÇÃó·ÇÕÅAQuadToQuadMatrix ÇégópǵǃçsóÒÇçÏê¨ÇµÅAÉXÉ^Å[ÉEÉHÅ[ÉYÉ^ÉCÉvÇÃÅuâìï˚Ç÷ÇÃÉXÉNÉçÅ[ÉãÅvå¯â Çé¿åªÇ∑ÇÈLJÇÃÇ≈Ç∑ÅBä÷êîÇÕíPèÉÇ…ÅAÉ\Å[ÉXÉ|ÉCÉìÉg (x, y)ÅAç∂è„ÅAâEè„ÅAâEâ∫ÅAç∂â∫Ç©ÇÁäJénǵNjÇ∑ÅBéüÇ…ÅAñ⁄ìIÇÃÉ|ÉCÉìÉgÇΔǵǃç∂è„Ç x ï˚å¸Ç…Å{20ÅAy ï˚å¸Ç…Å{40ÅAâEè„Ç x ï˚å¸Ç…Å|20ÅAy ï˚å¸Ç…Å{40ÅAâEâ∫ÅAç∂â∫Çê›íËǵNjÇ∑ÅB
void SetPerspectiveMatrix(Rect &inRect, MatrixRecord &outMatrix)
{
FixedPoint source[4], dest[4];
source[0].x = Long2Fix( inRect->left);
source[0].y = Long2Fix( inRect->top);
source[1].x = Long2Fix( inRect->right);
source[1].y = Long2Fix( inRect->top);
source[2].x = Long2Fix( inRect->right);
source[2].y = Long2Fix( inRect->bottom);
source[3].x = Long2Fix( inRect->left);
source[3].y = Long2Fix( inRect->bottom);
dest[0].x = Long2Fix( inRect->left + 20);
dest[0].y = Long2Fix( inRect->top + 40);
dest[1].x = Long2Fix( inRect->right - 20);
dest[1].y = Long2Fix( inRect->top + 40);
dest[2].x = Long2Fix( inRect->right);
dest[2].y = Long2Fix( inRect->bottom);
dest[3].x = Long2Fix( inRect->left);
dest[3].y = Long2Fix( inRect->bottom);
QuadToQuadMatrix((Fixed *)source, (Fixed *)dest, outMatrix);
}
|
ÉäÉXÉg 1. QuadToQuadMatrix ÇÃégópó·
|
[2002 îN 1 åé 3 ì˙]
|